package rjl.linearlist.impl;

import rjl.linearlist.MyLinearList;

/**
 * Created by Administrator on 2017/3/9.
 */
/*链表存储方式实现线性表*/
public class MyLInkList<E> implements MyLinearList<E> {
//    定义一个变量引用，用来指向第一个节点，也就是说找到这个链表
    private Node<E> start;
//    记录当前链表的结点的个数
    private int size;
    public MyLInkList(){
        start = null;
    }

    /**
     * 在链表中加入新的节点，首先判断这个链表是否有第一个节点
     * 如果没有则将新节点加入，如果有则进入下一个节点
     * 利用循环判断每个节点的下一个节点是否为空，如果为空就说明已经到了最后一个节点接下来
     * 就可以将新的节点赋上去，节点数量可以加1
     * @param e 新节点
     */
    @Override
    public void add(E e) {
        if (start == null){
            start = new Node<E>(e);
        }else {
            Node<E> a = start;
            while (a.next != null){
                a = a.next;
            }
            a.next = new Node<E>(e);
        }
        size++;
    }

    @Override
    public void insert(int i, E e) {
        Node<E> a ;
        Node<E> b ;
        Node<E> newnode = new Node<E>(e,null);
        if (i<0 || i>=size-1){

        }else {
            if (i == 0) {
                newnode.next = start;
                start = newnode;
            } else {
                /*第一种方法
                a = start;
                b = null;
                for (int j = 1; j <= i; j++) {
                    if (j == i){
                        b.next = newnode;
                        newnode.next = a ;
                    }
                     b = start;
                    a = a.next;
                }*/
//                第二种方法
                for (int j = 1; j <= i; j++){
                    if (j == i){
                        newnode.next = start.next;
                        start = newnode;
                    }
                    start = start.next;
                }
            }
        }

    }

    @Override
    public void delete(int i) {

    }

    @Override
    public int location(E e) {
        return 0;
    }

    @Override
    public E take(int i) {
        return null;
    }

    @Override
    public void update(int i, E e) {

    }

    @Override
    public int getsize() {
        return 0;
    }

    @Override
    public void clear() {

    }

    @Override
    public boolean isEmpt() {
        return false;
    }
}
